import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;


public class Processor extends Thread {
	private Socket socket ;
	private InputStream in;
	private PrintStream out;
	public final static String WEB_ROOT="C:\\myeclipse8\\Workspace\\files";
	public Processor (Socket socket) {
		this.socket = socket;
		try {
			in = socket.getInputStream();
			out = new PrintStream(socket.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void run(){
		String fileName = parse(in);
		sendFile(fileName);
	}
	
	public String parse(InputStream in){
		BufferedReader br = new BufferedReader(new InputStreamReader(in));
		String fileName  = null;
		try {
			String httpMessage = br.readLine();
			String[] content=httpMessage.split(" ");
			if(content.length!=3){
				sendErrorMessage(400,"client query error!");
				return null;
			}
			System.out.println("code:"+content[0]+",filename:"+content[1]+",http version:"+content[2]);
			fileName  = content[1];
		} catch (IOException e) {
			e.printStackTrace();
		}
		return fileName;
	}
	
	public void sendErrorMessage(int errorCode,String errorMessage){
		out.println("HTTP/1.0"+ errorCode +""+errorMessage);
		out.println("content-type: text/html");
		out.println();
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>Error Message</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("HTTP/1.0"+ errorCode +""+errorMessage);
		out.println(", ");
		out.println("  </BODY>");
		out.println("</HTML>");
	}
	
	public void sendFile(String filename){
		File file = new File(Processor.WEB_ROOT+filename);
		if (!file.exists()){
			sendErrorMessage(400,"File Not fount!");
			return;
		}
		try {
			InputStream in  =new FileInputStream(file);
			byte content[] = new byte[(int)file.length()];
			try {
				in.read(content);
				out.println("HTTP/1.0 200 send queryfile");
				out.println("content-length: " + content.length);
				out.println();
				out.write(content);
				out.flush();
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
